import { NextRequest, NextResponse } from 'next/server';
import { query } from '@/lib/sqlite_db';
import { generateSerialNumber } from '@/lib/utils';

/**
 * 生成软件著作权申请材料摘要的API路由
 * 该路由处理POST请求，生成登记申请表、源程序和说明文档的摘要内容
 * 
 * 注意：当前为开发版本，使用模拟数据进行演示
 * 生产环境应接入实际的PHP后端服务
 */
export async function POST(request: NextRequest) {
  try {
    // 解析请求体
    const body = await request.json();
    const { description, language, version } = body;
    
    // 参数验证：确保所有必要参数都已提供
    if (!description || !language || !version) {
      return NextResponse.json({
        success: false,
        error: '缺少必要参数'
      });
    }

    // 生成唯一的流水号，用于标识本次申请
    const serialNumber = generateSerialNumber();

    // 构建模拟响应数据（开发版本使用）
    // 生产环境应调用实际的后端服务生成真实内容
    const mockResponse = {
      serial_number: serialNumber,
      application_form_summary: `软件名称：${description}
版本号：${version}
开发语言：${language}
这是一个模拟的登记申请表摘要，用于测试系统功能。`,
      
      code_summary: `编程语言：${language}
软件名称：${description}
版本：${version}
这是一个模拟的源程序摘要，包含主要功能模块和技术架构的描述。`,
      
      document_summary: `文档类型：设计说明书
软件名称：${description}
开发语言：${language}
版本：${version}
这是一个模拟的说明文档摘要，包含设计理念和功能模块说明。`,
      
      usage_cost: {
        form: { total_tokens: 1000 },    // 登记申请表消耗的token数
        code: { total_tokens: 1200 },   // 源程序摘要消耗的token数
        document: { total_tokens: 800 },  // 说明文档摘要消耗的token数
        prompt: { total_tokens: 0 }     // 提示词消耗的token数
      }
    };

    // 将生成的摘要数据保存到数据库
    // 即使数据库保存失败，也会继续返回响应给用户
    try {
      const sql = `
        INSERT INTO generation_record (
          serial_number, software_description, development_language, version,
          application_form_summary, code_summary, document_summary, status
        ) VALUES (?, ?, ?, ?, ?, ?, ?, ?)
      `;
      await query(sql, [
        serialNumber, description, language, version,
        mockResponse.application_form_summary, mockResponse.code_summary, mockResponse.document_summary, 'summary_generated'
      ]);
    } catch (dbError) {
      console.error('数据库存储错误:', dbError);
      // 即使数据库存储失败，也会继续处理，确保用户体验
    }

    // 返回成功的响应，包含生成的摘要数据
    return NextResponse.json({
      success: true,
      data: mockResponse
    });

  } catch (error) {
    // 捕获并处理所有可能的错误
    console.error('生成摘要错误:', error);
    return NextResponse.json({
      success: false,
      error: '生成失败: ' + (error as Error).message
    });
  }
}